Initialize groundwater
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | inifile |
stores configuration information |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=short), | public | :: | i | ||||
type(IniList), | public | :: | iniDB | ||||
integer(kind=short), | public | :: | j | ||||
integer(kind=short), | public | :: | k | ||||
real(kind=float), | public | :: | scalar | ||||
character(len=100), | public | :: | string |
SUBROUTINE GroundwaterInit & ! (inifile) IMPLICIT NONE !Arguments with intent(in): CHARACTER (LEN = *), INTENT(IN) :: inifile !!stores configuration information !local declarations: TYPE (IniList) :: iniDB INTEGER (KIND = short) :: k , i, j CHARACTER (LEN = 100) :: string REAL (KIND = float) :: scalar !-----------------------------------end of declarations------------------------ !open and read configuration file CALL IniOpen (inifile, iniDB) !read the number of aquifers IF ( KeyIsPresent ('aquifers', iniDB ) ) THEN basin % naquifers = IniReadInt ( 'aquifers', iniDB ) ELSE CALL Catch ('error', 'Groundwater', & 'aquifers not found in configuration file' ) END IF !allocate aquifers ALLOCATE ( basin % aquifer ( basin % naquifers ) ) !load parameters DO k = 1, basin % naquifers string = 'aquifer_' // ToString (k) IF (SectionIsPresent(TRIM(string), iniDB)) THEN !load domain and boundary condition id IF (SubSectionisPresent (subsection = 'boundary-condition-id', & section = TRIM(string), iniDB = iniDB) ) THEN CALL GridByIni ( ini = iniDB, & grid = basin % aquifer (k) % domainBC, & section = TRIM(string), & subsection = 'boundary-condition-id') ELSE CALL Catch ('error', 'Groundwater', & 'missing boundary-condition-id in configuration file: ', & argument = TRIM(string) ) END IF !load boundary condition value IF (SubSectionisPresent (subsection = 'boundary-condition-value', & section = TRIM(string), iniDB = iniDB) ) THEN IF (KeyIsPresent ('scalar', iniDB, TRIM(string), & 'boundary-condition-value' ) ) THEN scalar = IniReadReal ('scalar', iniDB, & TRIM(string), 'boundary-condition-value' ) CALL NewGrid (basin % aquifer (k) % valueBC, & basin % aquifer (k) % domainBC, scalar) ELSE CALL GridByIni ( ini = iniDB, & grid = basin % aquifer (k) % valueBC, & section = TRIM(string), & subsection = 'boundary-condition-value') END IF ELSE CALL Catch ('error', 'Groundwater', & 'missing boundary-condition-value in configuration file: ', & argument = TRIM(string) ) END IF !load initial head IF (SubSectionisPresent (subsection = 'initial-head', & section = TRIM(string), iniDB = iniDB) ) THEN IF (KeyIsPresent ('scalar', iniDB, TRIM(string), & 'initial-head' ) ) THEN scalar = IniReadReal ('scalar', iniDB, & TRIM(string), 'initial-head' ) CALL NewGrid (basin % aquifer (k) % head0, & basin % aquifer (k) % domainBC, scalar) ELSE CALL GridByIni ( ini = iniDB, & grid = basin % aquifer (k) % head0, & section = TRIM(string), & subsection = 'initial-head') END IF CALL NewGrid (basin % aquifer (k) % head1, & basin % aquifer (k) % domainBC, 0.) basin % aquifer (k) % head1 = basin % aquifer (k) % head0 !head boundary condition overlay DO i = 1, basin % aquifer (k) % domainBC % idim DO j = 1, basin % aquifer (k) % domainBC % jdim IF ( basin % aquifer (k) % domainBC % mat (i,j) == & BC_DIRICHLET ) THEN basin % aquifer (k) % head0 % mat (i,j) = & basin % aquifer (k) % valueBC % mat (i,j) basin % aquifer (k) % head1 % mat (i,j) = & basin % aquifer (k) % valueBC % mat (i,j) END IF END DO END DO ELSE CALL Catch ('error', 'Groundwater', & 'missing initial-condition-head in configuration file: ', & argument = TRIM(string) ) END IF !load top elevation IF (SubSectionisPresent (subsection = 'top-elevation', & section = TRIM(string), iniDB = iniDB) ) THEN IF (KeyIsPresent ('scalar', iniDB, TRIM(string), & 'top-elevation' ) ) THEN scalar = IniReadReal ('scalar', iniDB, & TRIM(string), 'top-elevation' ) CALL NewGrid (basin % aquifer (k) % top, & basin % aquifer (k) % domainBC, scalar) ELSE CALL GridByIni ( ini = iniDB, & grid = basin % aquifer (k) % top, & section = TRIM(string), & subsection = 'top-elevation') END IF ELSE CALL Catch ('error', 'Groundwater', & 'missing top-elevation in configuration file: ', & argument = TRIM(string) ) END IF !load bottom elevation IF (SubSectionisPresent (subsection = 'bottom-elevation', & section = TRIM(string), iniDB = iniDB) ) THEN IF (KeyIsPresent ('scalar', iniDB, TRIM(string), & 'bottom-elevation' ) ) THEN scalar = IniReadReal ('scalar', iniDB, & TRIM(string), 'bottom-elevation' ) CALL NewGrid (basin % aquifer (k) % bottom, & basin % aquifer (k) % domainBC, scalar) ELSE CALL GridByIni ( ini = iniDB, & grid = basin % aquifer (k) % bottom, & section = TRIM(string), & subsection = 'bottom-elevation') END IF ELSE CALL Catch ('error', 'Groundwater', & 'missing bottom-elevation in configuration file: ', & argument = TRIM(string) ) END IF !load hydraulic conductivity IF (SubSectionisPresent (subsection = 'hydraulic-conductivity', & section = TRIM(string), iniDB = iniDB) ) THEN IF (KeyIsPresent ('scalar', iniDB, TRIM(string), & 'hydraulic-conductivity' ) ) THEN scalar = IniReadReal ('scalar', iniDB, & TRIM(string), 'hydraulic-conductivity' ) CALL NewGrid (basin % aquifer (k) % Ks, & basin % aquifer (k) % domainBC, scalar) ELSE CALL GridByIni ( ini = iniDB, & grid = basin % aquifer (k) % Ks, & section = TRIM(string), & subsection = 'hydraulic-conductivity') END IF ELSE CALL Catch ('error', 'Groundwater', & 'missing hydraulic-conductivity in configuration file: ', & argument = TRIM(string) ) END IF !load specific yield IF (SubSectionisPresent (subsection = 'specific-yield', & section = TRIM(string), iniDB = iniDB) ) THEN IF (KeyIsPresent ('scalar', iniDB, TRIM(string), & 'specific-yield' ) ) THEN scalar = IniReadReal ('scalar', iniDB, & TRIM(string), 'specific-yield' ) CALL NewGrid (basin % aquifer (k) % sy, & basin % aquifer (k) % domainBC, scalar) ELSE CALL GridByIni ( ini = iniDB, & grid = basin % aquifer (k) % sy, & section = TRIM(string), & subsection = 'specific-yield') END IF ELSE CALL Catch ('error', 'Groundwater', & 'missing specific-yield in configuration file: ', & argument = TRIM(string) ) END IF ! aquitard hydraulic conductivity IF ( k < basin % naquifers ) THEN IF (SubSectionisPresent (subsection = 'aquitard-conductivity', & section = TRIM(string), iniDB = iniDB) ) THEN IF (KeyIsPresent ('scalar', iniDB, TRIM(string), & 'aquitard-conductivity' ) ) THEN scalar = IniReadReal ('scalar', iniDB, & TRIM(string), 'aquitard-conductivity' ) CALL NewGrid (basin % aquifer (k) % KsAquitard, & basin % aquifer (k) % domainBC, scalar) ELSE CALL GridByIni ( ini = iniDB, & grid = basin % aquifer (k) % KsAquitard, & section = TRIM(string), & subsection = 'aquitard-conductivity') END IF ELSE CALL Catch ('error', 'Groundwater', & 'missing aquitard-conductivity in configuration file: ', & argument = TRIM(string) ) END IF END IF ELSE CALL Catch ('error', 'Groundwater', & 'missing section in configuration file: ', & argument = TRIM(string) ) END IF END DO !allocate variables CALL NewGrid ( transmissivity, basin % aquifer (1) % domainBC, 0. ) CALL NewGrid ( fluxUpward, basin % aquifer (1) % domainBC, 0. ) CALL NewGrid ( fluxDownward, basin % aquifer (1) % domainBC, 0. ) CALL NewGrid ( vadoseDepth, basin % aquifer (1) % domainBC, 0. ) !check river-groundwater interaction IF ( SectionIsPresent ( 'river-groundwater', iniDB) ) THEN riverGroundwaterInteract = .TRUE. CALL GroundwaterRiverInit ( inifile ) ELSE riverGroundwaterInteract = .FALSE. END IF !destroy iniDB CALL IniClose (IniDB) END SUBROUTINE GroundwaterInit